經過上篇對OpenOCD整體架構有了基本的了解,
本篇是第二篇的Lab,談點輕鬆的事情,讓我們試著在OpenOCD中,練習加一個Command!!
原本是想要加個Hello World Command,不過看起來已經被做完嘞~~
  
  
  
同Day 3的Lab
建立一個Command用來查詢該Target在內部的configure,並印在OpenOCD的Console上!簡單吧,其實是一時之間也想不到可以做啥 囧
  
  
  
首先,在src/target/hla_target.c中來註冊我們新增的Command
static const struct command_registration adapter_command_handlers[] = {                                                         
        {
                .chain = arm_command_handlers,
        },
        {
                .chain = armv7m_trace_command_handlers,
        },
        {
                .name = "query",
                .handler = handle_cortex_m_query_command,
                .mode = COMMAND_EXEC,
                .help = "query cortex_m configure",
                .usage = "",
        },
        COMMAND_REGISTRATION_DONE
};
在原先command chain後面加上我們需要的Command!
然後是實作的部分,直接快轉,一樣放在src/target/hla_target.c中:
COMMAND_HANDLER(handle_cortex_m_query_command)
{
        LOG_DEBUG("Hello World\n");     //編註: 練習一下Day05的內容
        struct target *target = get_current_target(CMD_CTX);
        printf("[Gernal Info]\n");
        printf("coreid    : %d\n", target->coreid);
        printf("endian    : %s\n", (target->endianness == 0x1)?"Big Endian":"Little Endian");
        printf("examined!?: %s\n", (target->examined)? "Yes":"No");
        printf("\n\n[Working area]\n");
        printf("Working-area  : %d\n", target->working_area);
        printf("Work-area-phys: 0x%08X\n", target->working_area_phys);
        return ERROR_OK;
}
時光飛逝,瞬間完成!
記得存檔!
  
  
  
終於寫完啦!!
現在要編譯OpenOCD,然後再來測試一下我們熱騰騰加上的Command!
如果忘記怎麼編譯,請參考Day 02: 簡介OpenOCD背景與編譯
./build.sh build src
然後去泡杯咖啡休息一下,或是去系統架構秘辛:了解RISC-V 架構底層除錯器的秘密! 系列點個訂閱按個讚!
編譯完成後,那就準備開始執行啦!!!
同Day 03: [Lab] 簡單操作OpenOCD的opneocd.cfg,我們就直接拿來用吧!
不過記得在裡面加上一行:
log_output test.log
把Log導向檔案中!
然後就可以來執行OpenOCD
./openocd -f openocd.cfg
一樣,我們用Telnet來測試這個Command
如果忘記如何操作的話,可以回顧一下Day 03: [Lab] 簡單操作OpenOCD的#3.1.1 Telnet Connect!!
輸入stm32f4x.cpu query來執行看看!!
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger
> stm32f4x.cpu query
>
成果如下:
Open On-Chip Debugger 0.10.0+dev-00161-g6c719f0-dirty (2017-12-24-15:20)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
[Gernal Info]
coreid    : 0
endian    : Little Endian
examined!?: Yes
[Working area]
Working-area  : 0
Work-area-phys: 0x20000000
  
  
  
第二篇Lab,一樣是淺顯的介紹OpenOCD,主要內容是回顧過去幾篇講解的內容,
明天開始的文章,將開始介紹這次鐵人賽的主題"RISC-V"架構&其背後的程式實作!